package com.example.starapp.starfrag;
import android.annotation.SuppressLint;


import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.example.starapp.R;


import java.util.ArrayList;
import java.util.List;

/**
 * 星座Fragment
 * 包括 ViewPager 和  GridView
 */
public class StarFragment extends Fragment {

    ViewPager starVP;
    GridView starGV;
    LinearLayout pointLayout;
    private StarBaseAdapter starBaseAdapter;
    //    声明图片数组
    int[]imgIds = {R.mipmap.pic_guanggao,R.mipmap.pic_star};
    //    ViewPager的数据源，用于存放里面放置的view对象
    List<ImageView>ivList;
    List<ImageView>pointList;
    private StarPagerAdapter starPagerAdapter;

    List<StarInfo.StarinfoBean> list;

    //    消息通信机制当中非常重要的类，他可以每隔一段时间发送消息，也可以实现主线程与其他线程的消息通信
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
//            可以接受消息的函数
            if (msg.what ==1) {
//                获取当前viewpager的显示页面
                int currentItem = starVP.getCurrentItem();
                if (currentItem == ivList.size()-1) {
//                    判断是否显示为最后一张
                    starVP.setCurrentItem(0); //回到第一个页面
                }else {
                    currentItem++;
                    starVP.setCurrentItem(currentItem);
                }

                handler.sendEmptyMessageDelayed(1,5000);
            }

        }
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_star, container, false);
        /*查找控件*/
        starGV = view.findViewById(R.id.starfrag_gv);
        starVP = view.findViewById(R.id.starfrag_vp);
        pointLayout = view.findViewById(R.id.starfrag_layout);
        initPager();
        initGrid();
//        监听viewpager滑动到了哪个页面
        setVPListener();
//        设置GridView的点击事件
        setGVListener();
//        发送一条消息，通知handler可以切换viewpager的页面了
        handler.sendEmptyMessageDelayed(1,5000);
        return view;
    }

    /* 设置GridView的单向点击事件*/
    private void setGVListener() {
        starGV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                StarInfo.StarinfoBean bean = list.get(position);
                Intent intent = new Intent(getContext(), StarAnalysisActivity.class);
                intent.putExtra("starinfo",bean);
                startActivity(intent);
            }
        });
    }


    /*生成九宫格当中的数据*/
    private void initGrid() {
//        获取activity传递过来的数据
        Bundle bundle = getArguments();
        StarInfo starInfo = (StarInfo) bundle.getSerializable("info");
        list = starInfo.getStarinfo();  //数据源
//        创建适配器
        starBaseAdapter = new StarBaseAdapter(getContext(), list);
//        设置适配器
        starGV.setAdapter(starBaseAdapter);
    }

    /*初始化Viewpager的界面的函数*/
    private void initPager() {
//        声明数据源集合
        ivList = new ArrayList<>();
        pointList = new ArrayList<>();
        for (int i = 0; i < imgIds.length; i++) {
            ImageView iv = new ImageView(getContext());
            iv.setImageResource(imgIds[i]); //设置显示图片
            iv.setScaleType(ImageView.ScaleType.FIT_XY);  //设置图片的显示样式
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            iv.setLayoutParams(lp);  // 设置图片的宽高
//            将图片加入到集合当中
            ivList.add(iv);

//            创建每一个图片对应的指示器小圆点
            ImageView pointIv = new ImageView(getContext());
            pointIv.setImageResource(R.mipmap.point_normal);
            LinearLayout.LayoutParams plp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            plp.setMargins(20,0,0,0);
            pointIv.setLayoutParams(plp);
//            将小圆点添加到布局当中
            pointLayout.addView(pointIv);
//            为了便于管理，将小圆点添加到统一管理的集合中
            pointList.add(pointIv);
        }
//        默认第一个页面对应的小圆点显示为获取焦点状态
        pointList.get(0).setImageResource(R.mipmap.point_focus);
//        创建适配器对象
        starPagerAdapter = new StarPagerAdapter(getContext(), ivList);
//        设置适配器
        starVP.setAdapter(starPagerAdapter);
    }

    /*设置viewpager的监听器的函数*/
    private void setVPListener() {
        starVP.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < pointList.size(); i++) {
                    pointList.get(i).setImageResource(R.mipmap.point_normal);
                }
                pointList.get(position).setImageResource(R.mipmap.point_focus);
            }
        });
    }
}